home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Moscow ML 1.42 / examples / pretty / ppexpr.sml < prev   
Encoding:
Text File  |  1997-08-18  |  1.4 KB  |  50 lines  |  [TEXT/R*ch]

  1. (* File mosml/examples/pretty/ppexpr.sml 
  2.  * Example demonstrating installable prettyprinters.
  3.  *
  4.  * Try it out by running 
  5.  *    mosml ppexpr.sml
  6.  * from the command line.
  7.  *)
  8.  
  9. val _ = (load "PP"; load "Int");
  10.  
  11. datatype expr = 
  12.     Cst of int 
  13.   | Neg of expr
  14.   | Plus of expr * expr
  15.  
  16. fun ppexpr pps e0 = 
  17.     let open PP
  18.         fun ppe (Cst i)        = add_string pps (Int.toString i)
  19.           | ppe (Neg e)        = (add_string pps "~"; ppe e)
  20.           | ppe (Plus(e1, e2)) = (begin_block pps CONSISTENT 0;
  21.                                   add_string pps "(";
  22.                                   ppe e1; 
  23.                                   add_string pps " + ";
  24.                                   add_break pps (0, 1);
  25.                                   ppe e2; 
  26.                                   add_string pps ")";
  27.                                   end_block pps)
  28.     in
  29.         begin_block pps INCONSISTENT 0; 
  30.         ppe e0;
  31.         end_block pps
  32.     end
  33.  
  34. val e1 = Cst 1;
  35. val e2 = Cst 2;
  36. val e3 = Plus(e1, Neg e2);
  37. val e4 = Plus(Neg e3, e3);
  38. val e5 = Plus(Neg e4, e4);
  39. val e6 = Plus(e5, e5);
  40. val e7 = Plus(e6, e6);
  41. val e8 = Plus(e3, Plus(e3, Plus(e3, Plus(e3, Plus(e3, Plus(e3, e7))))));
  42.  
  43. val _ = installPP ppexpr;
  44.  
  45. val _ = print 
  46.     "\nNow a pretty-printer for arithmetic expressions has been installed.\n\
  47.      \To see it in action, evaluate e.g.\n\
  48.      \  e1;\n  e3;\n  Plus(e1,e3);\n  e5;\n  e6;\n  e7;\n";
  49.     
  50.